package com.internetCafes.spms.web.customer.service.customer;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.internetCafes.spms.web.customer.entity.customer.Customer;
import com.internetCafes.spms.web.customer.model.customer.*;
import com.internetCafes.spms.web.customer.model.customer.quali.CustomerQualiDo;
import com.internetCafes.spms.web.customer.model.customer.quali.CustomerQualiPo;
import com.internetCafes.spms.web.toolbox.entity.QualiConf;

import java.util.List;

/**
 * <p>
 * 客户信息表 服务类
 * </p>
 *
 * @author Zj
 * @since 2021-10-20
 */
public interface ICustomerService extends IService<Customer> {

    /**
     * 更新客户按年统计 是否成交标签
     */
    void updateYearDealFlag();

    /**
     * 型用代码重复校验
     *
     * @param certificateCodeList 型用代码列表
     * @return 重复的信用代码
     */
    List<String> repeatCodeList(List<String> certificateCodeList);

    /**
     * 获取未跟进客户列表
     *
     * @return 客户列表
     */
    List<Customer> unFollowCustomerList();

    /**
     * 客户资质获取
     *
     * @param customerQualiDo 请求参数
     * @return 资质列表信息
     */
    List<CustomerQualiPo> customerQualiPoList(CustomerQualiDo customerQualiDo);

    /**
     * 批量保存客户信息
     *
     * @param customerDoList 客户列表
     * @return true/false
     */
    boolean saveDoBatch(List<Customer> customerDoList);

    /**
     * 获取客户详情列表
     *
     * @param customerDetailListDo 自定义请求实体类参数
     * @return 详情列表
     */
    List<CustomerDetailPo> customerPoDetailList(CustomerDetailListDo customerDetailListDo);

    /**
     * 资质信息列表
     *
     * @param customerId 客户id
     * @return 客户资质信息列表
     */
    List<QualiConf> qualiConfList(Long customerId);

    /**
     * 客户详情信息
     *
     * @param customerDetailDo 自定义请求实体类参数
     * @return 详细信息
     */
    CustomerDetailPo customerPoDetail(CustomerDetailDo customerDetailDo);

    /**
     * 客户Po分页信息获取
     *
     * @param page             分页
     * @param customerPagingDo 分页请求参数
     * @return 分页数据
     */
    Page<CustomerPagingPo> customerPoPaging(Page<Customer> page, CustomerPagingDo customerPagingDo);

    /**
     * 逻辑删除客户信息
     *
     * @param idList id列表
     * @return true/false
     */
    boolean deleteByIdList(List<Long> idList);

    /**
     * 批量清除客户信息
     *
     * @param idList id列表
     * @return true/false
     */
    boolean clearCustomerInfo(List<Long> idList);

    /**
     * 客户Poexcel导出信息获取
     *
     * @param customerPagingDo 请求参数
     * @return excel数据
     */
    List<CustomerPagingPo> customerPoList(CustomerPagingDo customerPagingDo);

}
